$( document ).ready( function(){
	
	/*
	 * Die folgende Funktion realisiert das neuladen der Userstoryliste unter Berücksichtigung der ausgewählten
	 * Filter und Sortierung.
	 */
    function sortAndFilterUserStories(state_pid, sort_by){
        $("#userStories").load('/user_stories/show?state_pid='+state_pid+'&sort_by='+sort_by);
    }
    /*
     * Das folgende Event wird gefeuert, wenn ein anderer Filter ausgewählt wurde.
     * Die Userstoryliste wird daraufhin aktualisiert.
     */ 
    $( document ).on("change", "#userstory_user_story_state_pid", function(){
        sortAndFilterUserStories(this.value, $("#userstory_sort_option").val());
    });
    
    /*
     * Das folgende Event wird gefeuert, wenn eine andere Sortierung gewählt wurde.
     * Die Userstoryliste wird daraufhin aktualisiert.
     */
    $( document ).on("change", "#userstory_sort_option", function(){
        sortAndFilterUserStories($("#userstory_user_story_state_pid").val(), this.value);
    });
	
    //Event für neue User Story registrieren.
    newItem("#addUserStory", "#userStoryDetail", '/user_stories/new');
	
    //Event für das Anzeigen oder Verstecken der Legende registrieren.
    showOrHide("#productBacklogMenu #showHideKey", "#keys", "Die Legende ausblenden", "Die Legende einblenden", "#keyIcon", "#userStories", 25);
    
    //Event für das Anzeigen oder Verstecken des Charts registrieren.
    showOrHide("#productBacklogMenu #showHideChart", "#wrapChart", "Das Chart ausblenden", "Das Chart einblenden", "#chartIcon", "#wrapProductBacklog, #wrapUserStoryDetail", 100);
	
    //Event für den Auswahlmodus registrieren.
    chooseMode("#chooseModus", "#chooseModeIcon");
    
    //Event Registrieren, welches die angeklickten Items im Auswahlmodus in einer Variablen sichert.
    markedItems(".userStory", "#userStoryDetail", "/user_stories/edit?id=");
    
    //Event für das Anzeigen Löschen der UserStories registrieren.
    deleteElements("#deleteUserStory", "die Userstory", "die Userstories", "eine");
    
    changeActiveProject("#productBacklogMenu #project_to_user_project_id", "#content", "/product_backlogs/show");

    /*
     * Sollen Userstories in das Sprintbacklog geschoben werden, wird dieses Event gefeuert.
     * Dazu werden zunächst die ausgewählten Userstories in ein entsprechendes Format gebracht
     * und dem Controller übermittelt. Das dabei vom Controller zurückgesendete Formular enthält einen
     * Submit button. Der Klick auf diesen muss später abgefangen werden. 
     */
	$("#addUserStoryToSprintBacklog").click(function(){
		if(chooseModus){
			if(marked.length > 0){
				var items = "";
	        	
	        	marked.forEach(function logArrayElements(element, index, array) {
	        		items += element+",";
	        	});
	        	
	        	items = items.substring(0, items.length-1);
				
	        	$.ajax({
	        		url: "../user_stories/rate?items="+items
        		})
        		.done(function(data) {
        			showDialog('notice', 'Bitte folgende User Stories bewerten', data);
        		})
                .fail(function(jqXHR, textStatus) {
                    $("#shader").hide();
                    showDialog("error", "Fehler", "Der Controller konnte nicht aufgerufen werden: " + textStatus);
                });
	        	
	        	chooseModus = false;
				
	        	$("#chooseModus").html("<img alt=\"In den Auswahlmodus wechseln\" class=\"icon\" id=\"chooseModeIcon\" src=\"/assets/layout/System.png\"/>");
    			$(".marked").each(function(i){
    				$(this).removeClass("marked");
    			});
			}else{ 
	        	showDialog('error', "Es ist ein Fehler aufgetreten", "Bitte w&auml;hlen Sie mindestens eine User Story aus, die ins Sprintbacklog eingetragen werden soll.");
			}
		}else {
			var countItems = 0;
			
        	$(".marked").each(function() {
        		items = this.id.split("_")[1];
        		countItems++;
        	});
			
        	if(countItems == 1){       		
				$.ajax({
	        		url: "../user_stories/rate?items="+items
        		})
        		.done(function(data) {
        			$(this).removeClass("marked");
        			showDialog('notice', 'Bitte folgende User Stories bewerten', data);
        		})
                .fail(function(jqXHR, textStatus) {
                    $("#shader").hide();
                    showDialog("error", "Fehler", "Der Controller konnte nicht aufgerufen werden: " + textStatus);
                });
        	}else{
        		showDialog('error', "Es ist ein Fehler aufgetreten", "Bitte w&auml;hlen Sie mindestens eine User Story aus, die ins Sprintbacklog eingetragen werden soll.");
			}
		}
	});
    
    /*
     * Werden UserStories in das Sprintbacklog geschoben, öffnet sich ein Dialog zur Bewertung. Beim klick
     * auf den Submit Button dieses Formulars, wird das folgende Event gefeuert.
     * 
     * An dieser Stelle werden nun die Daten an den entsprechenden Controller übermittelt und im Fehlerfall entsprechende
     * Meldungen ausgegeben.
     */
    $("#dialogMessage").on("submit", "#user_stories", function(event){
    	//Data enthält später alle Ratings im JSON Format.
        var data = "{";
       
        $("#dialogMessage form select").each(function(){
            data += "\"" + $(this).attr("name") + "\": " + $(this).val() + ",";
        });
       
        data = data.substr(0,data.length-1) + "}";
       
        $.ajax({
            url: "../user_stories/addratingtosprintbacklog",
            data: data,
            contentType: "application/json; charset=utf-8",
            dataType: "text",
            type: "post"
        })
        .done(function() {
            $(".marked").removeClass("marked");
            sortAndFilterUserStories($("#user_story_user_story_state_pid").val(), $("#user_story_sort_option").val());
            $("#shader").hide();
        })
        .fail(function(jqXHR, textStatus) {
            $("#shader").hide();
            showDialog("error", "Fehler beim Rating", "Die ausgewählten User Stories konnten nicht aktualisiert werden: " + textStatus);
        });
        
        event.preventDefault();
    });
    
    /*
     * Der beim Löschen erzeugte Bestätigungsdialog enthält einen Bestätigungsbutton mit der ID
     * confirm. Der Klick auf diesen Button muss abgefangen werden und das entgülte löschen durchgefüht werden.
     * Um dieses Problem kümmert sich das folgende Event.
     * 
     * Um das Parallele Arbeiten am Projekt zu gewährleisten, wird zudem überprüft, welche Userstories tatsächlich gelöscht
     * werden konnten.
     */
	
	$(document).on("click", "#confirm", function(){
		$("#shader").hide();
		$.getJSON( "../user_stories/delete?items="+items).done(function( data ) {
			if(data != "0"){
				var itemsNotDeleted = "";

				if(data.length > 0){
    				$.each( data.items, function( i, item ) {
    					marked.splice($.inArray(item, marked), 1);
    					itemsNotDeleted += item+",";
    			    });	
				}else{
					// alles konnte alles gelöscht werden
					marked.splice($.inArray(data, marked), 1);
					itemsNotDeleted += data+",";
				}

				$.each( data, function( i, item ) {
					marked.splice($.inArray(item, marked), 1);
					itemsNotDeleted += item+",";
			    });

				if(itemsNotDeleted != ""){
					itemsNotDeleted = itemsNotDeleted.substring(0, itemsNotDeleted.length-1);
					showDialog('error', "Es ist ein Fehler aufgetreten", "Items: <p>" + itemsNotDeleted + "</p> konnten nicht gelöscht werden!");
				}
			}
			
        	marked.forEach(function logArrayElements(element, index, array) {
        		$("#userStory_"+element).fadeOut(200);
        	});
        	
        	marked = new Array();

			$("#chooseModus").html("<img alt=\"In den Auswahlmodus wechseln\" class=\"icon\" id=\"chooseModeIcon\" src=\"/assets/layout/System.png\"/>");
			$(".marked").each(function(i){
				$(this).removeClass("marked");
			});
			chooseModus = false;
		});
	});
});